Для понимания подойдет простейший пример, в котором мы сможем создавать, читать, обновлять и удалять простые текстовые документы
Установка компонентов
На официальном сайте node (https://nodejs.org/) есть подробные инструкции по установке
Примеры для самого распространенного, если не хочется переходить и искать
Для centos:
1 | $ curl —silent —location https://rpm.nodesource.com/setup_9.x | sudo bash - |
Для ubuntu:1
2
3$ curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ sudo apt-get install -y build-essential
Затем организуем папку для проекта и в ней выполняем команду для его инициализации:
initialization in it:1
$ npm init
Отвечаем на вопросы следующие вопросы
- Название проекта
- Версия проекта
- Описание проекта
- Входная точка
- Команда на тестирование
- Репозиторий гитхаба
- Ключевые слова проекта
- Автор проекта
- Лицензия
И подтверждаем, после чего в папке появляется файл package.json, описывающий проект
Теперь установим оставшиеся компоненты: Express и MongoDB(последняя версия плагина некорректно работает с БД, так что лучше установить более раннюю):1
$ npm install --save express mongodb@2.2.16
Так же для удобства обработки url-encoded запросов устанавливаем body-parser:1
$ npm install --save body-parser
И для удобства разработки хорошо бы установить Nodemon, который каждый раз будет перезапускать сервер, когда будут изменяться какие-либо файлы:1
$ npm install --save-dev nodemon
А дальше для подключения Nodemon надо добавить следующее в package.json:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20{
"name": "notable",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error^ no test specified\" && exit 1",
"dev": "nodemon server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.2",
"express": "^4.16.2",
"mongodb": "^2.2.16"
},
"devDependencies": {
"nodemon": "^1.14.2"
}
}
Чтобы тестировать наше приложение установим postman(https://www.getpostman.com/) – он будет имитировать запросы
Запуск сервера
Создадим файл server.js,в котором пропишем зависимости (то с чем будет работать сервер), укажем порт и запустим прослушивание:1
2
3
4
5
6
7
8const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const app = express();
const port = 8080;
app.listen(port, () => {
console.log('We are live on ' + port);
});
Запустим сервер:1
npm run dev
В терминале теперь можно видеть сообщение “We are live on port 8080”
Структура проекта
Для более удобного структурирования проекта стоит создать папку app, в ней создаем папку routes, а в ней – файлы index.js и note_routes.js
Таким образом структура выглядит так: в app/routes – наши обработчики маршрутов, в папке node_modules – модули нашего проекта, а server.js непосредственно описывает наш сервер.
Подключение БД
В корень проекта добавляем директорию config, создаем в ней файл db.js.
В файл db.js пишем следующее:1
2
3module.exports = {
url : 'mongodb://localhost:27017/<yourDataBase>'
};
А в файл server.js добавляем:1
2
3
4
5
6
7
8
9
10
11
12
13
14const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const db = require(‘./config/db’);
const app = express();
const port = 8080;
app.use(bodyParser.urlencoded({ extended: true }));
MongoClient.connect(db.url, (err, database) => {
if (err) return console.log(err)
require(‘./app/routes’)(app, database);
app.listen(port, () => {
console.log('We are live on ' + port);
});
});
Создание текстового документа
В app/routes/note_routes.js пишем:1
module.exports = function(app, db) { };
В app/routes/index.js:1
2
3
4
5
6
7
8
9
10
11
12
13const noteRoutes = require('./note_routes');
module.exports = function(app, db) {
app.post('/notes', (req, res) => {
const note = { text: req.body.body, title: req.body.title };
db.collection('notes').insert(note, (err, result) => {
if (err) {
res.send({ 'error': 'An error has occurred' });
} else {
res.send(result.ops[0]);
}
});
});
};
Чтение документа
По аналогии с app.post, пишем другой метод:1
2
3
4
5
6
7
8
9
10
11app.get('/notes/:id', (req, res) => {
const id = req.params.id;
const details = { '_id': new ObjectID(id) };
db.collection('notes').findOne(details, (err, item) => {
if (err) {
res.send({'error':'An error has occurred'});
} else {
res.send(item);
}
});
});
Удаление документа
По аналогии с app.post, пишем другой метод:1
2
3
4
5
6
7
8
9
10
11app.delete('/notes/:id', (req, res) => {
const id = req.params.id;
const details = { '_id': new ObjectID(id) };
db.collection('notes').remove(details, (err, item) => {
if (err) {
res.send({'error':'An error has occurred'});
} else {
res.send('Note ' + id + ' deleted!');
}
});
});
Обновление документа
По аналогии с app.post, пишем другой метод:1
2
3
4
5
6
7
8
9
10
11
12app.put ('/notes/:id', (req, res) => {
const id = req.params.id;
const details = { '_id': new ObjectID(id) };
const note = { text: req.body.body, title: req.body.title };
db.collection('notes').update(details, note, (err, result) => {
if (err) {
res.send({'error':'An error has occurred'});
} else {
res.send(note);
}
});
});
Тестирование
Postman позволяет указывать тип запроса (get, post, put, update), адрес и порт для запроса, а также добавлять в тело запроса различные параметры, например, пустой POST-запрос на 8080 порт.
По выполнении запроса, мы видим ответ сервера
Пример POST-запроса с заполненным телом:
Пусть сервер выводит запрос в консоль сервера, тогда мы увидим:
Ссылки
Для установки node
https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora
Для установки postman
https://www.getpostman.com/
Аналогичные статьи
- https://medium.freecodecamp.com/building-a-simple-node-js-api-in-under-30-minutes-a07ea9e390d2#.eybmlr1g9
- https://habrahabr.ru/company/ruvds/blog/321104/
- https://loftblog.ru/material/4-podklyuchenie-bazy-dannyx-k-express/
- http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/